package cn.ljq.controller.adm;

import cn.ljq.dao.ClzMapper;
import cn.ljq.dao.LargeFileMapper;
import cn.ljq.dao.UserMapper;
import cn.ljq.entity.Clz;
import cn.ljq.entity.Largefile;
import cn.ljq.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.UUID;

@Controller
@RequestMapping("/adm/teacher")
public class AdmTeacherController {


    @Autowired
    UserMapper userMapper;

    @Autowired
    LargeFileMapper largeFileMapper;

    @Autowired
    ClzMapper clzMapper;


    @RequestMapping("/show")
    public String show(Integer curpage,Model model){

        if (curpage == null)curpage=1;

        //curpage 当前页数

        System.out.println("当前页数：" + curpage);

        Integer total = userMapper.getTotal("tea");  //查询总行数

        System.out.println("总行数：" + total);

        int page = total/6;

        if (total % 6 != 0){   //总行数除以行数后 有余数的话
            page = page + 1;    //总页数 +1
        }

        System.out.println("总页数：" + page);

        model.addAttribute("curpage",curpage);  //给当前页数

        model.addAttribute("page",page);  //给总页数

        int n1 = (curpage - 1) * 6;  //从第几行开始

        int n2 = 6;  //输出几行

        String role = "tea";  //定义角色

        model.addAttribute("teachers",userMapper.findPage(n1,n2,role));

        System.out.println(userMapper.findPage(n1,n2,role));

        return "adm/teacher/page";
    }


    @GetMapping("/go2add")  //获取添加的表单
    public String go2add(Model model){

        model.addAttribute("actmsg","添加教师");

        model.addAttribute("action","add");

        return "forward:/adm/teacher/show";

    }


    @PostMapping("/add")
    //required = true  必须提供图片    required = false  图片可有可无
    //@RequestParam参数注解  <input name 和接收变量名不一致时 做个转换处理
    public String add(User user, @RequestParam(value = "img",required = true)MultipartFile filex , Model model)throws Exception{

        user.setRole("tea");  //定义角色  当前添加的人 定义为学生角色

        if (filex == null || filex.isEmpty() == true){  //没有图片

            model.addAttribute("noimg","添加失败-没有上传图片");

            System.out.println("没有图片上传");

            return "forward:/adm/teacher/show";
        }

        //先保存图片
        String uuid = UUID.randomUUID().toString();

        Largefile largefile = new Largefile();

        System.out.println("uuid = " + uuid);

        largefile.setId(uuid);  //添加照片id

        largefile.setFilename(filex.getOriginalFilename());  //添加照片名称

        byte[] buf = filex.getBytes();

        //数组本身就是对象 可以向上转型
        largefile.setContent(buf);  //文件内容 bye[] 向上转型 Object content

        largeFileMapper.addimg(largefile);

        //照片保存到数据库成功
        user.setPic(uuid);//学生和图片要关联起来 uuid是t_largefile的主键，uuid作为学生的外键

        System.out.println(user);

        userMapper.add(user);   //最后再添加教师/学生学习

        model.addAttribute("yesimg","添加成功");

        return "forward:/adm/teacher/show";

    }


    @GetMapping("/del/{id}")
    //@PathVariable  路径没有？了  @GetMapping("/del/{id}") 和 @PathVariable("id")  的id 名称要一致
    public String del(@PathVariable("id")int id,Model model){

        userMapper.del(id);  //直接删除掉

        return "forward:/adm/teacher/show";
    }

    @GetMapping("/go2update/{uid}")
    public String go2update(@PathVariable("uid")int id,Model model){

        model.addAttribute("action","update");

        model.addAttribute("actmsg","修改教师");

        User user = userMapper.findById(id);  //找到传过来的id 的那个人所有信息

        System.out.println(user.getClz().getClzname() + "======");

        System.out.println("找到了所有信息：" + user);

        model.addAttribute("oneUser",user);

        System.out.println("888777");

        List<Clz> allClz = clzMapper.findAll();   //找到所有班级名称

        System.out.println(allClz);

        System.out.println("787878");

        Clz clz = clzMapper.findOne(user.getClz().getClzno());

        System.out.println("====");

        model.addAttribute("oneClz",clz);

        model.addAttribute("allClz",allClz);

        return "forward:/adm/teacher/show";

    }



    @PostMapping("/update")
    public String update(User user, @RequestParam(value = "img",required = false)MultipartFile filex ,Model model)throws Exception{

        user.setRole("tea");  //定义角色  当前添加的人 定义为教师角色

        System.out.println("收到的修改数据===" + user);

        System.out.println("输出完整的修改信息===" + user);

        if (filex == null ||filex.isEmpty() == true){  //没有图片

         System.out.println("没有上传图片");

         User user1 = userMapper.findById(user.getUid());  //再根据id找到修改的那个人的信息

         user.setPic(user1.getPic());  //拿到原本的照片 用原来的照片

         System.out.println("原来的照片数据 ==" + user1);

         //假如没上传图片

         System.out.println("最终数据====" + user);

         userMapper.update(user);   //最后再添加教师信息

         model.addAttribute("yesimg","添加成功");

         return "forward:/adm/teacher/show";

        }

        //有上传图片的情形
        //先保存图片
        String uuid = UUID.randomUUID().toString();

        if (filex != null || filex.isEmpty() != true) {  //有照片

         System.out.println("有上传图片 ");

         Largefile largefile = new Largefile();

         largefile.setId(uuid);  //添加照片id

         largefile.setFilename(filex.getOriginalFilename());  //添加照片名称

         byte[] buf = filex.getBytes();


         //数组本身就是对象 可以向上转型

         largefile.setContent(buf);  //文件内容 bye[] 向上转型 Object content

         largeFileMapper.addimg(largefile);

         //照片保存到数据库成功
         user.setPic(uuid);//教师和图片要关联起来 uuid是t_largefile的主键，uuid作为学生的外键

        }

        System.out.println("最终数据====" + user);

        userMapper.update(user);   //最后再添加教师信息

        model.addAttribute("yesimg","添加成功");

        return "forward:/adm/teacher/show";

    }


    @GetMapping("/prevpage")
    public String prevpage(Integer curpage,Model model){   //上一页操作

        if (curpage == null)curpage=1;  //如果当前页数是null，则定义为1  防止浏览器直接访问这个路径

        if (curpage>1)curpage--;  //如果当前页数不小于1 则可以继续上一页

        model.addAttribute("students",new User());  //给一个空值 避免空指针

        return "forward:/adm/teacher/show?curpage=" + curpage;  //把页数给到前端
    }

    @GetMapping("/nextpage")
    public String nextpage(Integer curpage,Model model){   //下一页操作

        if (curpage == null)curpage=1;  //如果当前页数是null，则定义为1  防止浏览器直接访问这个路径

        Integer count = userMapper.getTotal("tea");  //获取总行数

        if (curpage == -1){  //如果当前页数是-1
            curpage = count/6;  //最后一页
        }

        if (curpage * 6 < count)curpage++; //当前页数 * 行数小于总行数  则当前页数+1

        model.addAttribute("teacher",new User());  //给一个空值 避免空指针

        return "forward:/adm/teacher/show?curpage=" + curpage;  //把页数给到前端
    }


}
